%
%~~
%~~  Descrição BNF
%~~
%
\chapter{Descrição da linguagem em BNF}
\label{03:chp:descricaobnf}
Abaixo a descrição da linguagem em \textit{Backus-Naur Form}(BNF)
\begin{verbatim} 

<LETRA>::=A|B|C|D|E|F|G|H|I|J|L|M|N|O|P|Q|R|S|T|U|W|V|Y|X|Z|
          a|b|c|d|e|f|g|h|i|j|l|m|n|o|p|q|r|s|t|u|w|v|y|x|z
 
<DIGITO>::=0|1|2|3|4|5|6|7|8|9
 
<NUMERO>::=<DIGITO><NUMERO>|-<NUMERO>|<NUMERO>.<NUMERO>|.<NUMERO>
 
<LETRADIG>::=<LETRA>|<DIGITO>|<LETRADIG><LETRA>|<LETRADIG><DIGITO>
 
<EOL>::=\n|EOF
 
<COMENTARIO>::=<COMENTARIO LINHA UNICA>|<COMENTARIO BLOCO>
 
<COMENTARIO LINHA UNICA>::=// <QUALQUER SEQUENCIA DE CARACTERES><EOL> 
 
<COMENTARIO BLOCO>::=/* <QUALQUER SEQUENCIA DE CARACTERES> */
 
<TIPO>::=int|float|char|string
 
<IDENTIFICADOR>::=<LETRA>|<LETRA><LETRADIG>|<LETRA><LETRADIG>_<LETRADIG>
                   |<LETRA><LETRADIG>_
 
<IDENTIFICADOR VARIAVEL>::=<IDENTIFICADOR>
 
<VARIAVEL>::=<IDENTIFICADOR VARIAVEL>
 
<IDENTIFICADOR FUNCAO>::=<IDENTIFICADOR>
 
<CHAMADA FUNCAO>::=<IDENTIFICADOR FUNCAO>(<ARGUMENTOS>)
 
<ARGUMENTOS>::=<VAZIO>|<LISTA ARGUMENTOS>
 
<LISTA ARGUMENTOS>::=<ARGUMENTO>|<LISTA ARGUMENTOS>,<ARGUMENTO>
 
<ARGUMENTO>::=<EXPRESSAO>|<CARACTERE>|<STRING>
 
<DECLARACAO VARIAVEL>::=<TIPO><VARIAVEL>;|<TIPO><COMANDO ATRIBUICAO>
 
<COMANDO ATRIBUICAO>::=<VARIAVEL>=<EXPRESSAO ARITMETICA>|
                                  <CARACTERE>|<CHAMADA FUNCAO>|<STRING>;
 
<COMANDO>::=<COMANDO ITERACAO>|<COMANDO CONDICAO>|<COMANDO ATRIBUICAO>
            |<COMANDO LEITURA>|<COMANDO ESCRITA>|<COMANDO><COMANDO>
 
<COMANDO ITERACAO>::=<WHILE LOOP>
 
<WHILE LOOP>::=while (<CONDICAO>) {<COMANDO>}
 
<CONDICAO>::=<EXPRESSAO LOGICA>
 
<COMPARACAO>::=<EXPRESSAO ARITMETICA><OPERADOR COMPARACAO>
               <EXPRESSAO ARITMETICA>
 
<OPERADOR COMPARACAO>::= > | < | == | >= | <= | !=
 
<LOGICO PRIMARIO>::=<VARIAVEL>|<COMPARACAO>|(<EXPRESSAO LOGICA>)
 
<LOGICO SECUNDARIO>::=<LOGICO PRIMARIO>|!<LOGICO PRIMARIO>
 
<FATOR LOGICO>::=<LOGICO SECUNDARIO>|<FATOR LOGICO> || <LOGICO SECUNDARIO>
 
<TERMO LOGICO>::=<FATOR LOGICO>|<TERMO LOGICO> && <FATOR LOGICO>
 
<EXPRESSAO LOGICA>::=<TERMO LOGICO>
 
<EXPRESSAO ARITMETICA>::=<EXEPRESSAO ARITMETICA> + <TERMO> 
                         |<EXPRESSAO ARITMETICA> - <TERMO>
                         |<TERMO>
 
<TERMO>::=<TERMO> * <FATOR>|<TERMO> / <FATOR>|<FATOR>
 
<FATOR>::=<IDENTIFICADOR>|<NUMERO>|(<EXPRESSAO ARITMETICA>)
 
<COMANDO CONDICAO>::=<IF SIMPLES>|<IF>
 
<IF SIMPLES>::=if (<CONDICAO>) { <COMANDO> }
 
<IF>::=if (<CONDICAO>) { <COMANDO> } else {<COMANDO>}
 
<EXPRESSAO>::=<EXPRESSAO ARITMETICA>|<EXPRESSAO LOGICA>
 
<CARACTERE>::='<QUALQUER CARACTERE>|<VAZIO>'
 
<STRING>::="<QUALQUER SEQUENCIA DE CARACTERES>|<VAZIO>"
 
<COMANDO LEITURA>::=read(<LISTA VARIAVEIS>);
 
<LISTA VARIAVEIS>::=<VAZIO>|<VARIAVEL>,<LISTA VAIRAVEIS>
 
<COMANDO ESCRITA>::=print(<EXPRESSAO ARITMETICA>|<CARACTERE>|<STRING>);
\end{verbatim}